﻿#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include <climits>
#include<assert.h>
//模拟实现atoi函数
//int my_atoi(char* str)
//{
//	assert(str);
//	if (*str == '\0')
//	{
//		return 0;
//	}
//	while (*str == ' ' || *str == '\t' || *str == '\b' || *str == '\n')
//	{
//		str++;
//	}
//	int flag = 1;
//	if (*str == '+')
//	{
//		flag = 1;
//		str++;
//	}
//	else if (*str == '-')
//	{
//		flag = -1;
//		str++;
//	}
//	long long ret = 0;
//	while (*str)
//	{
//		if (*str > '0' && *str <= '9')
//		{
//			ret = ret * 10 + flag*(*str - '0');
//			if (ret > INT_MAX)
//			{
//				return INT_MAX;
//			}
//			else if (ret < INT_MIN)
//			{
//				return INT_MIN;
//			}
//		}
//		else
//		{
//			return (int)ret;
//		}
//		str++;
//	}
//	return (int)ret;
//}
//
//int main()
//{
//	int ret = my_atoi("\n  -1.23");
//	printf("%d", ret);
//	return 0;
//}

//void find_single_dog(int arr[], int sz, int single_dog[])
//{
//	int ret = 0;
//	int i = 0;
//	for (i = 0; i < sz; i++)
//	{
//		ret ^= arr[i];//ret= ret^arr[i]
//	}
//	//计算ret的哪一位二进制位是1
//	int pos = 0;
//	for (i = 0; i < 32; i++)
//	{
//		if (((ret >> i) & 1) == 1)
//		{
//			pos = i;
//			break;
//		}
//	}
//	for (i = 0; i < sz; i++)
//	{
//		if (((arr[i] >> pos) & 1) == 1)
//		{
//			single_dog[0] ^= arr[i];
//		}
//		else
//		{
//			single_dog[1] ^= arr[i];
//		}
//	}
//}

//int main()
//{
//	int arr[] = { 1,2,3,4,8,1,2,3,4,6 };
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	int single_dog[2] = {0};
//
//	find_single_dog(arr, sz, single_dog);
//	printf("%d %d\n", single_dog[0], single_dog[1]);
//	return 0;
//}


//
//FILE* fopen(const char* filename, const char* mode);

//struct _iobuf {
//	char* _ptr;
//	int   _cnt;
//	char* _base;
//	int   _flag;
//	int   _file;
//	int   _charbuf;
//	int   _bufsiz; 
//	char* _tmpfname;
//};
//typedef struct _iobuf FILE;


//int main()
//{
//	FILE* p = fopen("test.txt", "r");
//	if (p == NULL)
//	{
//		return 1;
//	}
//	int ret = 0;
//	ret = fgetc(p);
//	printf("%c", ret);
//	fclose(p);
//	p = NULL;
//}

//int main()
//{
//	FILE* p = fopen("test.txt", "w");
//	if (p == NULL)
//	{
//		perror("test.txt");
//		return 1;
//	}
//	int ch;
//	ch = fputc('b', p);
//	fclose(p);
//	p = NULL;
//}

//struct stu {
//	char name[20];
//	int age;
//};
//
//int main()
//{
//	struct stu s = { "zhangsan",18};
//	struct stu buf[20] = { 0 };
//	sprintf(buf, "%s %d",s.name,s.age);
//	printf("%s\n", buf);//打印字符串
//	struct stu tmp = { 0 };
//	sscanf(buf, "%s %d", tmp.name, &(tmp.age));
//	printf("%s %d", tmp.name, tmp.age);//打印结构体数据
//	return 0;
//}
//int main()
//{
//	int c; // 注意：int，非char，要求处理EOF   
//	FILE* fp = fopen("test.txt", "r");
//	if (!fp) {
//		perror("File opening failed");
//		return -1;
//	}
//	//fgetc 当读取失败的时候或者遇到文件结束的时候，都会返回EOF  
//	while ((c = fgetc(fp)) != EOF) // 标准C I/O读取文件循环 
//	{
//		putchar(c);
//		//判断是什么原因结束的  
//	}
//		if (ferror(fp))
//			puts("I/O error when reading");
//		else if (feof(fp))
//			puts("End of file reached successfully");
//		fclose(fp);
//		fp = NULL;
//}

#include <stdio.h>
#include <windows.h>//VS2013 WIN10环境测试
int main()
{
	FILE* pf = fopen("test.txt", "w");
	fputs("abcdef", pf);//先将代码放在输出缓冲区
	printf("睡眠10秒-已经写数据了，打开test.txt文件，发现文件没有内容\n"); Sleep(10000);
	printf("刷新缓冲区\n");
	fflush(pf);//刷新缓冲区时，才将输出缓冲区的数据写到文件（磁盘）
	//注：fflush 在高版本的VS上不能使用了
	printf("再睡眠10秒-此时，再次打开test.txt文件，文件有内容了\n"); Sleep(10000); fclose(pf);
	//注：fclose在关闭文件的时候，也会刷新缓冲区 pf = NULL;
	return 0;
}